package br.com.rtp.tarefas.controller;

import java.sql.SQLException;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpSession;

import org.apache.catalina.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.br.rtp.tarefas.model.Tarefa;
import br.com.br.rtp.tarefas.model.Usuario;
import br.com.br.rtp.tarefas.model.VerificaLogin;
import br.com.rtp.Dao.TarefaDao;
import br.com.rtp.Dao.UtilDB;

@Controller
public class TarefaController {
	
	@PostConstruct
	public void inicializaBD() throws SQLException, ClassNotFoundException{
		UtilDB.inicializaBD();
	}
	
	@RequestMapping("logar")
	public String logar(Usuario guest, HttpSession session){
		VerificaLogin login = new VerificaLogin();
		if (login.usuarioValido(guest)){
			session.setAttribute("usuario", guest);
			return "tarefa/main";
		}
		else return "index";
	}
	
	@RequestMapping("menuTarefas")
	public String inicial(){
		return "tarefa/main";
	}
	
	@RequestMapping("novaTarefa") //Direciona para um JSP (form criarTarefa) atraves do Index 
	public String form(){
		return "tarefa/criarTarefa";
	}
	
	@RequestMapping("criarTarefa") //Executado pelo Spring e retorna JSP adicionada como resultado
    public String adiciona(Tarefa tarefa) throws SQLException, ClassNotFoundException {
        TarefaDao dao = new TarefaDao();
        dao.adiciona(tarefa);
        return "tarefa/adicionada";
    } 
	
	@RequestMapping("listaTarefas") //Lista em um JSP atraves do Index
	public String lista(Model model) throws SQLException, ClassNotFoundException{
		TarefaDao dao = new TarefaDao();
		List<Tarefa> tarefas = dao.lista();
		model.addAttribute("status",tarefas);
		return "tarefa/listaCompleta";
	}
	
	@RequestMapping("filtroTarefas") 
	public String listaStatus(Model model, Tarefa tarefa) throws SQLException, ClassNotFoundException{
		TarefaDao dao = new TarefaDao();
		System.out.println("Status selecionado: " + tarefa.getStatus());
		List<Tarefa> tarefas = dao.lista(tarefa.getStatus());
		model.addAttribute("status",tarefas);
		return "tarefa/listaCompleta";	
	}
	
	@RequestMapping("statusTarefas") 
	public String statusTarefass(Model model, Tarefa tarefa) throws SQLException, ClassNotFoundException{
		TarefaDao dao = new TarefaDao();
		System.out.println("Status selecionado: " + tarefa.getStatus());
		List<Tarefa> tarefas = dao.lista(tarefa.getStatus());
		model.addAttribute("status",tarefas);
		return "tarefa/listaStatus";	
	}
	
	@RequestMapping("mostraTarefa") //Mostra tarefa para inserir dados da conclusão
	public String mostra (Long id, Model model) throws SQLException, ClassNotFoundException{
		
		TarefaDao dao = new TarefaDao();
		model.addAttribute("tarefa",dao.buscaPorId(id));
		return "tarefa/resolverTarefa";
	}
	
	@RequestMapping("efetuaConclusao")
	public String concluir(Tarefa tarefa) throws  SQLException, ClassNotFoundException{
		
		System.out.println("Controller");
		System.out.println("Data da conclusao: " + tarefa.getDtConclusao());
		System.out.println("Descricao da conclusao: " + tarefa.getDescSolucao());
		System.out.println("ID da tarefa: " + tarefa.getId());
		
		TarefaDao dao = new TarefaDao();
		
		dao.resolve(tarefa);
		return "redirect:listaTarefas"; 
	}
	
	@RequestMapping("removeTarefa")  //Remove depois de listado
	public String remove(Tarefa tarefa) throws SQLException, ClassNotFoundException{
		TarefaDao dao = new TarefaDao();
		dao.remove(tarefa);
		return "redirect:listaTarefas";
	}
	
	@RequestMapping("sobre")
	public String chamaGrupo(){
		return "tarefa/sobre";
	}
	
	@RequestMapping("logout")
	public String logout (){
		
		return "index";
	}
	
}
